package br.com.locanet.dao.database.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.PersistenceException;

import br.com.locanet.bean.impl.Filme;
import br.com.locanet.dao.GenericJPADAO;

public class FilmeDAO extends GenericJPADAO<Filme> {
	@Override
	protected Object[] doPrepareQuery(StringBuffer query, Filme entity) {
		List<Object> values = new ArrayList<Object>();
		
		for (Object obj : super.doPrepareQuery(query, entity)){
			values.add(obj);
		}
		
		if (entity.getId()!=null){
			query.append(" AND oEntidade.id = ? ");
			values.add(entity.getId());
		}

		if (entity.getTitulo()!=null || entity.getDescricao()!=null){
			query.append(" AND ( ");
			if (entity.getTitulo()!=null){
				query.append(" oEntidade.titulo LIKE ? ");
				values.add("%"+entity.getTitulo()+"%");
			}else
				query.append(" 1=0 ");
			if (entity.getDescricao()!=null){
				query.append(" OR oEntidade.descricao LIKE ? ");
				values.add("%"+entity.getDescricao()+"%");
			}
			query.append(" ) ");
		}
		
		if (entity.getDataChegada()!=null){
			query.append(" AND oEntidade.dataChegada = ? ");
			values.add(new SimpleDateFormat("yyyy-MM-dd").format(entity.getDataChegada()));
		}
		if (entity.getEstilo()!=null&&entity.getEstilo().getId()!=null){
			query.append(" AND oEntidade.estilo.id = ? ");
			values.add(entity.getEstilo().getId());
		}
		if (entity.getStatus()!=null){
			query.append(" AND oEntidade.status = ? ");
			values.add(entity.getStatus());
		}
		return values.toArray();
	}
	
	@Override
	public Filme doMerge(Filme entity) throws PersistenceException {
		Filme oldEntity = findById(entity);
			
		if (entity.getDataChegada()!=null)
			oldEntity.setDataChegada(entity.getDataChegada());
		if (entity.getDescricao()!=null)
			oldEntity.setDescricao(entity.getDescricao());
		if (entity.getTitulo()!=null)
			oldEntity.setTitulo(entity.getTitulo());
		if (entity.getEstilo()!=null&&entity.getEstilo().getId()!=null)
			oldEntity.setEstilo(entity.getEstilo());
		if (entity.getImagens()!=null&&!entity.getImagens().isEmpty())
			oldEntity.setImagens(entity.getImagens());
		if (entity.getStatus()!=null)
			oldEntity.setStatus(entity.getStatus());
			
		return oldEntity;
	}
	
}
